Technical Field
This disclosure relates to computing systems, and more particularly, to techniques for implementing virtualized I/O device sharing within a distributed processing node system.
Description of the Related Art
Computer systems may include multiple processors or nodes, each of which may include multiple processing cores. Such systems may also include various Input/Output (I/O) devices, which each processor may send data to or receive data from. For example, I/O devices may include network interface cards (NICs) or network adapters that allow the processors to communicate with other computer systems, and external peripherals such as printers. Various forms of storage devices, such as mechanical and solid-state disk drives, may also be included with a computing system. In some systems, such I/O devices may send interrupts to signal various events. For example, an I/O device may send an interrupt to signal the completion of a direct memory access (DMA) operation or another type of operation. An I/O device may send a message to inform software of an internally detected error, or of an error on an I/O link coupled to the I/O device.
System I/O architectures such as PCI Express (PCIe) have become extremely successful and adopted throughout the computer industry. Within a PCIe hierarchy, one node is designated as the root complex within the fabric and is responsible for resource allocation for itself and all other fabric nodes (e.g., various switches and endpoint devices). Some systems include an I/O device as one of the endpoint devices, and high bandwidth communications (data and interrupts) take place between the I/O device and the root complex. Methods to share a single I/O device amongst multiple device drivers or virtual machine instances residing within one hardware processing unit have been designed and implemented for some time. Standards such as the PCI Express Single-Root I/O Virtualization (PCIe SR-IOV) specification describe one method, and many peripheral devices in the computer industry have been designed to this standard. Alternatively, some cluster-based systems have provided means for sharing devices at the operating system (OS) level. For example, one currently available kernel allows a device that is physically attached to one node to be managed, via a message-passing system, by another node in the cluster.